/*
*
*  文章数据模型
*  负责处理文章模块数据
*
*/
const db = require('../../config/db')
module.exports = {
    // 编写添加文章方法
    // 参数：article_id, article_title, article_text, article_create_time, article_tags, article_author, article_navigate, article_src, article_content, user_id
    add(article_id, article_title, article_text, article_create_time, article_tags, article_author, article_navigate, article_src, article_content, user_id) {
        // console.log({article_id, article_title, article_text, article_create_time, article_tags, article_author, article_navigate, article_src, article_content, user_id})
        return new Promise((resolve, reject) => {
            let insert_article_sql = "insert into db_article(article_id,article_title,article_text,article_create_time,article_tags,article_author,article_navigate,article_src,article_content,user_id) values('" + article_id + "','" + article_title + "','" + article_text + "','" + article_create_time + "','" + article_tags + "','" + article_author + "','" + article_navigate + "','" + article_src + "','" + article_content + "','" + user_id + "')"           
            db.query(insert_article_sql, (err, rows) => {
                if (err) {
                    resolve({ code: -1, msg: '添加文章失败。', err })
                } else {
                    resolve({ code: 200, msg: '添加文章成功。', article_create_time, article_title })
                }
            })
        })
    },

    // 编写删除文章方法
    // 参数：
    remove(article_id) {
        return new Promise((resolve, reject) => {
            db.query("select * from db_article where article_id = '" + article_id + "'", function (err, rows) {
                if (err) {
                    resolve({ code: -1, msg: '查询文章失败。', err })
                } else {
                    db.query("delete from  db_article where article_id = '" + article_id + "'", function (error, result) {
                        if (err) {
                            resolve({ code: -1, msg: '删除文章失败。', error })
                        } else {
                            resolve({ code: 200, msg: '删除文章成功。' })
                        }
                    });
                }
            })
        })
    },

    // 编写获取文章列表的方法
    // 参数：
    list() {
        return new Promise((resolve, reject) => {
            let check_article_sql = "select * from db_article"
            db.query(check_article_sql, (err, rows) => {
                if (err) {
                    resolve({ code: -1, msg: '查询异常。', err })
                } else {
                    resolve({ code: 200, msg: '获取文章列表成功。', result: rows })
                }
            })
        })
    },

    // 编写文章分页列表方法
    // 参数：page_num,page_size
    items(page_num, page_size) {
        return new Promise((resolve, reject) => {
            const params = [(parseInt(page_num) - 1) * parseInt(page_size), parseInt(page_size)]
            db.query("select * from db_article limit "+params[0]+","+params[1]+"", function (err, rows) {
                if (err) {
                    resolve({
                        code: -1,
                        msg: '查询文章失败。',
                        err
                    })
                } else {
                    //as更换名称
                    db.query('select count(*) as total from db_article', function (error, among) {
                        if (error) {
                            resolve({
                                code: -1,
                                msg: '统计文章数量失败。',
                                error
                            })
                        } else {
                            resolve({
                                code: 200,
                                msg: "获取分页列表成功。",
                                result: rows,
                                page: {
                                    page_num: page_num,
                                    page_size: page_size,
                                    total: among[0]['total'] //查询表中的数量

                                }
                            })
                        }
                    })
                }
            })

        })
    },

    // 编写获取文章详情方法
    // 参数：article_id
    detail(article_id) {
        return new Promise((resolve, reject) => {
            if (article_id) {
                db.query("select * from db_article where article_id = '" + article_id + "'", (err, rows) => {
                    if (err) {
                        resolve({ code: -1, msg: '查询详情失败。' })
                    } else {
                        resolve({ code: 200, msg: '获取详情成功。', result: rows })
                    }
                })
            }
        })
    },

    // 编写更新文章方法
    // 参数：article_id,article_title,article_text,article_create_time,article_tags,article_author,article_navigate,article_src,article_content
    update(article_id, article_title, article_text, article_create_time, article_tags, article_author, article_navigate, article_src, article_content) {
        return new Promise((resolve, reject) => {
            let update_article_sql = "update db_article set article_title= '" + article_title + "', article_text= '" + article_text + "', article_create_time= '" + article_create_time + "', article_tags= '" + article_tags + "', article_author= '" + article_author + "', article_navigate= '" + article_navigate + "', article_src= '" + article_src + "', article_content= '" + article_content + "' where  article_id= '" + article_id + "'"
            db.query(update_article_sql, (err, rows) => {
                if (err) {
                    resolve({ code: -1, msg: '更新文章失败。', err })
                } else {
                    resolve({ code: 200, msg: '更新文章成功。' })
                }
            })
        })
    },

    // 编写上传图片的方法
    // 参数：article_img_id , article_img_src
    upload(article_img_id, article_img_src) {
        return new Promise((resolve, reject) => {
            // 插入图片
            let insert_temp_sql = "insert into db_article_img(article_img_id,article_img_src) values('" + article_img_id + "','" + article_img_src + "')"
            db.query(insert_temp_sql, (err, rows) => {
                if (err) {
                    resolve({
                        err: -1,
                        msg: "上传图片失败。",
                        err
                    })
                } else {
                    resolve({
                        err: 200, // 注意：值是数字，不能是字符串
                        msg: "上传图片成功。",
                        errno: 0, // 注意：值是数字，不能是字符串
                        data: {
                            "url": article_img_src, // 图片 src ，必须
                            "id": article_img_id,
                            "alt": "图片", // 图片描述文字，非必须
                            "href": "http://" // 图片的链接，非必须
                        }
                    })
                }
            })
        })
    },

    // 编写删除文章图片方法
    // 参数：article_img_id
    delete(article_img_id) {
        return new Promise((resolve, reject) => {
            //根据id查找数据库中图片的地址
            db.query('select src from article_imgs_temp where article_img_id=?', [article_img_id], (err, rows) => {
                if (err) { resolve({ code: -1, msg: '删除文章图片失败。' }) }
                //找到相应的图片数据
                if (rows.length == 1) {
                    //通过slice方法，分割出图片前面的url地址
                    let index = rows[0].src.indexOf('upload')
                    let temp_path = path.join(__dirname, 'public', rows[0].src.slice(index))
                    // fs.unlink删除文件,path为图片文件地址
                    fs.unlink(temp_path, function (error) {
                        if (error) { resolve({ code: -1, msg: '删除文章图片失败。' }) }
                        //删除图片文件成功，删除该id对应的图片地址在数据库中的数据
                        db.query('delete from article_imgs_temp where article_img_id=?', [article_img_id], (err, results) => {
                            if (err) {
                                resolve({ code: -1, msg: '删除文章图片失败。' })
                            }
                            else {
                                if (results.affectedRows == 1) {
                                    resolve({ code: -1, msg: '删除文章图片成功。' })
                                } else {
                                    resolve({ code: 200, msg: '删除图片失败。' })
                                }
                            }
                        })
                    })
                }
            })
        })
    },

    // 编写统计文章数量方法
    all() {
        return new Promise((resolve, reject) => {
            db.query('select count(*) as total from db_article', function (error, among) {
                if (error) {
                    resolve({
                        code: -1,
                        msg: '统计文章数量失败。',
                        error
                    })
                } else {
                    resolve({
                        code: 200,
                        msg: "获取文章数量成功。",
                        total: among[0]['total']
                    })
                }
            })

        })
    }
}
